阻止 AutoMapper 将 null 值映射为 空集合

momo314相同方式共享非商业用途署名转载

AutoMapper 可以说是很好用了,项目里用起来省心省力,也没出过什么幺蛾子,所以直到今天才关注到他。

今天跟前端联调接口的时候发现,有一个 List<string> 类型的字段,本来应该返回 null, 但实际却返回了一个空列表 []。排查代码的时候发现竟然是 AutoMapper 的锅, 现场还原如下:

// 假设我们有一个 Person 类
class Persion
{
    public string Name { get; set; }
    public List<string> GirlFriendNames { get; set; }
}

// 还有一个 Person 类的 DTO
class PersionDTO
{
    public string Name { get; set; }
    public List<string> GirlFriendNames { get; set; }
}

// 然后又有一个 Persion 的实例
var momo314 = new Persion
{
    Name = "momo314",
    GirlFriendNames = null
};

// 现在使用 AutoMapper 将其转换为 DTO
var dto = _mapper.Map<PersionDTO>(momo314);

// 最后就会发现 List<string> 字段被转换成了空集合
Assert.IsTrue(dto.GirlFriendNames != null)

那么,怎么解决呢?

其实也很简单,只需要在 AutoMapper 初始化的时候指定 AllowNullCollections = true 即可。

var config = context.Resolve<MapperConfigurationExpression>();
// 当集合类型(ICollection)字段为 null 时,不必替换为空集合
config.AllowNullCollections = true;
✎﹏ 本文来自于 momo314和他们家的猫,文章原创,转载请注明作者并保留原文链接。